--多层继承中的父类调用
-- 创建更复杂的继承结构
--[[
Truck类定义
继承自Vehicle类，表示卡车对象
]]
Truck = {}
setmetatable(Truck, Vehicle)
Truck.__index = Truck
Truck.super = Vehicle

--[[
创建新的Truck对象

@param name 车辆名称
@param capacity 载重能力(吨)，可选参数，默认为0
@return 返回新创建的Truck对象
]]
function Truck:new(name, capacity)
    local obj = Vehicle:new(name)
    setmetatable(obj, Truck)
    obj.capacity = capacity or 0  -- 吨
    return obj
end

--[[
装载货物

@param cargo 货物重量(吨)
]]
function Truck:load(cargo)
    print("Loading " .. cargo .. " tons of cargo")
end

--[[
启动卡车，执行安全检查

重写父类的start方法，添加卡车特有的启动检查逻辑
]]
function Truck:start()
    print("Truck checking cargo security...")
    self.super.start(self)
    print("Truck systems check complete")
end

--[[
FireTruck类定义
继承自Truck类，表示消防车对象
]]
FireTruck = {}
setmetatable(FireTruck, Truck)
FireTruck.__index = FireTruck
FireTruck.super = Truck

--[[
创建新的FireTruck对象

@param name 消防车名称
@param waterCapacity 水容量(升)，可选参数，默认为0
@return 返回新创建的FireTruck对象
]]
function FireTruck:new(name, waterCapacity)
    local obj = Truck:new(name, 10)  -- 默认载重10吨
    setmetatable(obj, FireTruck)
    obj.waterCapacity = waterCapacity or 0  -- 升水
    return obj
end

--[[
启动消防车，执行紧急检查

重写父类的start方法，添加消防车特有的启动检查逻辑
]]
function FireTruck:start()
    print("Fire truck emergency check...")
    -- 调用直接父类(Truck)的方法
    self.super.start(self)
    print("Water pump system activated")
    print("Emergency lights on")
end

--[[
驾驶消防车

重写drive方法，直接调用祖父类Vehicle的drive方法
]]
function FireTruck:drive()
    -- 可以调用任何祖先类的方法
    Vehicle.drive(self)  -- 直接调用祖父类方法
    print("Racing to the fire scene with sirens on")
end

-- 使用示例
local fireTruck = FireTruck:new("Fire Engine #1", 2000)
fireTruck:start()
print("---")
fireTruck:drive()
--[[
输出结果：
Fire truck emergency check...
Truck checking cargo security...
Fire Engine #1 engine started
Truck systems check complete
Water pump system activated
Emergency lights on
---
Fire Engine #1 is driving
Racing to the fire scene with sirens on
]]